<?php

namespace app\admin\model;

use think\Model;
use think\db;

class Product extends Model
{
    // 表名
    protected $name = 'product';
    
    // 自动写入时间戳字段
    protected $autoWriteTimestamp = false;

    // 定义时间戳字段名
    protected $createTime = false;
    protected $updateTime = false;
    
    // 追加属性
    protected $append = [
        'c_time_text'
    ];
    

    



    public function getCTimeTextAttr($value, $data)
    {
        $value = $value ? $value : (isset($data['c_time']) ? $data['c_time'] : '');
        return is_numeric($value) ? date("Y-m-d H:i:s", $value) : $value;
    }

    protected function setCTimeAttr($value)
    {
        return $value && !is_numeric($value) ? strtotime($value) : $value;
    }

    /**
     * 增加产品
     * @author javen
     * $day  天数 根据天数生成相应天数数据
     * $res  pid
     * $pricetype  产品价格类型  0-单价模式  1-房价模式  生成默认套餐时需要
     */
    public function product_add_M($day,$res,$pricetype)
    {

        //根据数组增加主表

        //根据天数生成每天行程表

        //生成必要相关信息表
/**
        for($i=1;$i<=$day;$i++){

            $data= ['p_id' => $res,
                'titlearr' => "",
                'day_no' => $i,
            ];
            $inid=$this->route_add_M($data);
        }
**/



        //增加默认套餐组
        $data= ['p_id' => $res,
            'fid' => 0,
            'pptype' => 0,
            'ptitle' => '默认线路(套餐)总类别',
            'status'=>1,
            'pa_order'=>1,
            'pricetype'=>$pricetype,

        ];

        Db::name('product_package')->insert($data);
        $paid = Db::name('product_package')->getLastInsID();


        $data= ['p_id' => $res,
            'fid' => $paid,
            'pptype' => 1,
            'ptitle' => '默认线路(套餐)组',
            'status'=>1,
            'pa_order'=>1,
            'pricetype'=>$pricetype,
            'selecttype'=>2,
        ];

        Db::name('product_package')->insert($data);
        $paid1 = Db::name('product_package')->getLastInsID();

        $data= ['p_id' => $res,
            'fid' => $paid1,
            'pptype' => 2,
            'ptitle' => '默认线路(套餐)',
            'status'=>1,
            'pa_order'=>1,
            'selecttype'=>2,
            'pa_showchar'=>"A",
            'pricetype'=>$pricetype,
        ];
        $packageid=Db::name('product_package')->insertGetId($data);


        //生成默认套餐行程

        for($i=1;$i<=$day;$i++){

        $data= ['p_id' => $res,
        'titlearr' => "",
        'day_no' => $i,
            'package_id'=>$packageid
        ];
        $inid=$this->route_add_M($data);
        }


    }

    /**
     * 修改产品
     * @author javen
     */
    public function product_edit_M($pid,$productarr)
    {


    }

    /**
     * 增加团期
     * @author javen
     */
    public function productgroup_add_M($productarr,$pricestr,$is_price)
    {
      $insertid=Db::name('product_group')->insertGetId($productarr);
        if($is_price){
            if($pricestr!=""){

                $pieces = explode("@", $pricestr);
                for($i=0;$i<count($pieces);$i++){
                    $parr1=explode("#", $pieces[$i]);
                    $insertarr=[];
                    $insertarr['p_id']=$productarr['p_id'];
                    $insertarr['package_id']=$productarr['package_id'];
                    $insertarr['group_id']=$insertid;
                    $insertarr['p_num']=$parr1[0];
                    $insertarr['price']=$parr1[1];
                    $insertarr['title']=$parr1[2];
                    $insertarr['info']=$parr1[3];
                    $groupid= Db::name('product_price_a')->insertGetId($insertarr);
                }
            }

        }

        return $insertid;
    }
    /**
     * 修改团期
     * @author javen
     */
    public function productgroup_edit_M($id,$productarr,$pricestr,$is_price)
    {

        Db::name('product_group')->where(['id' => $id])->update($productarr);

        if($is_price){
            Db::name('product_price_a')->where(['group_id' => $id])->delete();
            $pieces = explode("@", $pricestr);
            for($i=0;$i<count($pieces);$i++){
                $parr1=explode("#", $pieces[$i]);
                $insertarr=[];
                $insertarr['p_id']=$productarr['p_id'];
                $insertarr['group_id']=$id;
                $insertarr['package_id']=$productarr['package_id'];
                $insertarr['p_num']=$parr1[0];
                $insertarr['price']=$parr1[1];
                $insertarr['title']=$parr1[2];
                $insertarr['info']=$parr1[3];
                Db::name('product_price_a')->insertGetId($insertarr);
            }

        }
    }
    /**
     * 删除团期
     * @author javen
     */
    public function productgroup_del_M($id)
    {
        Db::name('product_price_a')->where(['group_id' => $id])->delete();
        Db::name('product_group')->where(['id' => $id])->delete();
    }


    /**
     * 团期价格增加修改删除完成后根据groupid更新每团期的最低价，
     * 返回数组 [0]-最低价
     * @author javen
     * 1217修改javen--因为加入套餐，需要判断所有套餐的本团期最低价
     */

    public function getgpest($groupid)
    {
        //根据groupid，查找时间戳，根据时间戳找到相同时间戳的其他套餐价格



        $ginfo=db('product_group')->field("g_time,p_id")->where("id=".$groupid)->find();

        $packagegrouparr=db('product_group')->where("g_time=".$ginfo['g_time']." and p_id=".$ginfo['p_id'])->select();

        $lowestprice=1000000;

        for($i=0;$i<count($packagegrouparr);$i++){
           $pricearr=db('product_price_a')->where("group_id=".$packagegrouparr[$i]['id'])->order('price asc')->limit(1)->select();

if($pricearr){
    if($pricearr[0]["price"]<$lowestprice) {
        $lowestprice=$pricearr[0]["price"];
    }
}


        }

        for($i=0;$i<count($packagegrouparr);$i++){
            db("product_group")->where("id=".$packagegrouparr[$i]["id"])->update(['price' => $lowestprice]);
        }

        $est=[];
        $est[0]=$lowestprice;

        return $est;
    }




    /**
     * 团期价格增加修改删除完成后根据pid更新每个团期的最低价，设置产品最低价，产品最低折扣
     * 返回数组 [0]-最低价 [1]-最高折扣
     * @author javen
     */
    public function getpriceest($pid)
    {
          $est=[];
        $pricearr=db('product_group')->where("p_id=".$pid." and status<>2")->order('price asc')->limit(1)->select();

        $lowestprice=@$pricearr[0]["price"];

        $discountarr=db('product_group')->where("p_id=".$pid." and status<>2")->order('discount desc')->limit(1)->select();
        $highestdiscount=@$discountarr[0]["discount"];
        $est[0]=$lowestprice;
        $est[1]=$highestdiscount;

        db("product")->where("id=".$pid)->update(['lowprice' => $est[0],'discount' => $est[1]]);
    return $est;
    }


    /**
     * 增加行程天数
     * @author javen
     */
    public function route_add_M($routearr)
    {

        //增加前将后续天数 全部 加1
        Db::name('route')->where("p_id=".$routearr['p_id']." and day_no>=".$routearr['day_no'])->setInc('day_no',1);
        //增加行程天数主表
        Db::name('route')->insert($routearr);
        //增加行程天数子表
        $trid = Db::name('route')->getLastInsID();

        //增加天数，默认增加   概述，住宿，餐饮
        $titlearr=[
            "tr_id" => $trid,
            "itype" => "1",
            "title" => getstr("route_info-itype",1),
            "info" => "",
            "tagid" => 1,
        ];
        Db::name('route_info')->insert($titlearr);
        $titlearr=[
            "tr_id" => $trid,
            "itype" => "3",
            "title" => getstr("route_info-itype",3),
            "info" => "",
            "tagid" => 3,
        ];
        Db::name('route_info')->insert($titlearr);
        $titlearr=[
            "tr_id" => $trid,
            "itype" => "5",
            "title" => getstr("route_info-itype",5),
            "info" => "",
            "tagid" => 5,
        ];
        Db::name('route_info')->insert($titlearr);

         //返回增加的产品id

        return $trid;


    }


    /**
     * 修改行程天数标题
     * @author javen
     */
    public function route_edit_M($routearr)
    {
        $res=Db::name('route')->where('id', $routearr['tr_id'])->update(['titlearr'=>$routearr['titlearr']]);
        return $res;
    }

    /**
     * 删除行程天数
     * @author javen
     */
    public function route_del_M($rid,$p_id){

        //删除操作需要以下操作

        //1删除 子表所属图片--（包括数据库和文件）
        //2删除 行程天数所属子表
        //3修改后续天数 全部 减一
        //4删除主表
        //1.删除所有子表所属图片（包括数据库和文件）
        $rinfolist=Db::name('route_info')->where("id=".$rid)->select();
        foreach($rinfolist as $rt1){
            //删除行程内容图片（数据库）
            Db::name('route_info_img')->where('tri_id', $rt1['id'])->delete();
            //删除行程内容图片（文件）---未完成
        }
        //2.删除行程天数所属子表
        Db::name('route_info')->where('tr_id', $rid)->delete();

        //3.修改后续天数 全部 减一
            //查询本行程第N天
        $dayno=Db::name('route')->find($rid);
        Db::name('route')->where("p_id=".$p_id." and day_no>".$dayno['day_no'])->setDec('day_no',1);

        //4删除行程天数主表

        Db::name('route')->where('id', $rid)->delete();
    }


    /**
     * 增加行程天数内容
     * @author javen
     */

    public function product_add_info_M($pinfoarr)
    {
        $triid= Db::name('route_info')->insert($pinfoarr);
       // $triid = Db::name('route_info')->getLastInsID();
        return $triid;
    }


    /**
     * 修改行程天数内容
     * @author javen
     */

    public function product_edit_info_M($id,$pinfoarr)
    {
       $res= Db::name('route_info')->where("id",$id)->update($pinfoarr);
       return $res;
    }


    /**
     * 增加行程天数内容图片
     * @author javen
     */

    public function product_add_info_img_M($pinfoimgarr)
    {
        Db::name('route_info_img')->insert($pinfoimgarr);
    }

    /**
     * 删除行程天数内容图片
     * @author javen
     */
    public function product_del_info_img_M($delid)
    {
        Db::name('route_info_img')->where(['id' => $delid])->delete();
    }




    /**
     * 删除行程天数内容
     * @author javen
     */
    public function product_del_info_M($delid)
    {

        $list= Db::name('route_info')->where(['tr_id' => $delid])->select();
        foreach ($list as $k=>$v){
            $list2=Db::name('route_info_img')->where('tri_id', $v['id'])->select();
            foreach ($list2 as $k1=>$v1){
                $thumb=explode("/",$v1['imgadr']);
                //dump($thumb);die;
                $thumb_img=ROOT_PATH . 'public'."/".$thumb['1']."/".$thumb['2']."/"."200_120"."/".$thumb['3'];
                $imgpath=ROOT_PATH . 'public'.$v1['imgadr'];

                //删除图片文件(夹)
               // @unlink($imgpath);
               /// @unlink($thumb_img);
                if($v['itype']!=7){
                    @unlink($imgpath);
                    @unlink($thumb_img);
                }
                //删除图片库中info子数据
                Db::name('route_info_img')->delete($v1['id']);
            }
            //删除数据库中info数据
            Db::name('route_info')->delete($v['id']);
        }
        $result= Db::name('route')->where(['id' => $delid])->find();

        //增加前将后续天数 全部 加1
        $where['package_id']=$result['package_id'];
        $where['p_id']=$result['p_id'];
        $where['day_no']=array("egt",$result['day_no']);;
        Db::name('route')->where($where)->setInc('day_no',-1);

        $res=Db::name('route')->where(['id' => $delid])->delete();
        return $res;
    }


}
